#ifndef USERMODEL_H
#define USERMODEL_H

#include <QString>
#include <QVector>
#include <QMap>
#include "basemodel.h"

//个人信息结构体
//@todo 从这里开始，UserProfile结构体修改为responseUserInfo，服务器新增getUserInfo接口
struct UserProfile{
    int uid;
    QString avatar;
    QString nickname;
    int sex;
    int status = 0;
    QString statusText = "";
    QString signText = "";//个性签名
};

//好友列表结构体
struct FriendListItem{
    QString name;
    int onlineNum;
    int totalNum;
    QVector<UserProfile> friendList;
};

//不要构造函数，使用单例(忘了为什么要设计为单例)
//用户模型层，作用：
//1、登陆，获取uid
//2、获取用户profile等信息
class UserModel : protected BaseModel
{
public:
    static UserModel* NewInstance();

    /**
     * @brief 登录接口
     * @param account
     * @param password
     * @param userStatus
     * @return
     */
    bool login(QString account, QString password, int userStatus = ResponseStruct::USER_STATUS_ONLINE);
    /**
     * @brief 获取用户信息
     * @param uid
     * @return
     */
    bool getProfile(int uid);

    /**
     * @brief 拉取好友列表(@todo后期改为拉取组列表)
     * @param req
     * @return
     */
    bool getFriendList(requestFriendListStruct req);

    /**
     * @brief 拉取好友列表(测试用，废弃)
     * @return
     */
    QVector<FriendListItem> getFriendList();

    /**
     * @brief 发送聊天消息
     * @param req
     * @return
     */
    bool sendMsg(requestChatStruct req);

    /**
     * @brief setFriendListData 新增好友列表全局数据
     * @param uid
     * @param user
     * @return
     */
    void setFriendListData(int uid, responseUserInfo user);
    QMap<int, responseUserInfo> getFriendListData();
    responseUserInfo getFriendDataByUid(int uid);

private:
    UserModel();
    //单例
    static UserModel *singleObj;
    //全局数据，好友列表，uid作为key
    static QMap<int, responseUserInfo> friendListData;
    int uid;
};


#endif // USERMODEL_H
